相比于发布到中央仓库,其实有更简单的方法,如 Jitpack,无需域名认证、GPG签名,只需有代码仓库就可,约10分钟就可以完成接入。但本文的重点还是推送至中央仓库。
一、注册Sonatype账号申请创建项目
首先前往 Sonatype 提 issues 来创建一个项目(比较原始),没有账号的先行注册。
创建项目即是创建一个新的 groupId,提交完 issue 后,会有一个经办人要求你在域名下添加一个 TXT 记录,从而验证该域名属于你,添加完后,将 issue 重新打开,经办人验证通过后,这一步就告一段落。
对于很多小项目,不会有特定域的,也支持使用一些托管服务,如 Github,详情见 https://central.sonatype.org/publish/requirements/coordinates/
二、生成 GPG
此步骤用于生成对上传的文件进行签名的秘钥对。
此步骤也按文档操作: https://central.sonatype.org/publish/requirements/gpg/
根据系统,选择合适的安装包,安装 Gnupg Download
执行 gpg --gen-key
,按照指引,输入名称、邮箱、密码等信息生成一个key。
查看所生成的 key
1 | $ gpg --list-keys |
向服务器分发我们的公钥
1 | gpg --keyserver keyserver.ubuntu.com --send-keys CA925CD6C9E8D064FF05B4728190C4130ABA0F98 |
最后导出私钥到文件中
1 | gpg --export-secret-key CA925CD6C9E8D064FF05B4728190C4130ABA0F98 > secret.gpg |
至此第二步完成
三、配置 Gradle 推送至仓库
此时已经可以准备推送了,还需配置下 gradle。
我使用 Kotlin 编写 gradle,即 build.gradle.kts 文件。
这里请不要参考 sonatype 的配置或其他博客,因为 gradle 版本千差各异,写法都略有去呗,仅参对应版本的考官方文档,我使用的为 Gradle7.2
1 | import org.jetbrains.kotlin.gradle.tasks.KotlinCompile |
最后需要在 ~/.gradle/gradle.properties
文件中配置 gpg 秘钥以及第一步注册 sonatype 时的用户名、密码,不存在文件就新建。
1 | ossrhUsername=xxxxxx |
这里也可以不直接使用用户和密码,建议使用 accessToken 发布,依旧使用一开始创建的用户名、密码来登录 https://s01.oss.sonatype.org ,授权后将获得一组新的用户名密码。
一切已准备就绪,执行 gradle 中的 publish 方法
四、发布到中央仓库
如果上一步发布过了一个正式包,那么将在 sonatype 中看见:
选择该仓库后,先 Close,再 Release 发布,大功告成。
不久后你就会收到邮件:
Central sync is activated for net.peihuan. After you successfully release, your component will be available to the public on Central https://repo1.maven.org/maven2/, typically within 30 minutes, though updates to https://search.maven.org can take up to four hours.
30分钟后能同步到中央仓库,4小时才能被搜索到,耐心等待。
参考文档:
https://central.sonatype.org/publish/requirements/gpg/
https://docs.gradle.org/current/userguide/publishing_maven.html
https://help.sonatype.com/repomanager2/configuration/security-setup-with-user-tokens